﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace DigitalSolutionManagement
{
    public partial class frmMain : Form
    {
        public frmMain()
        {
            InitializeComponent();
            this.Icon = Properties.Resources.ico;
        }

        private bool CheckFormAlreadyOpen(string frmName)
        {
            foreach (Form frm in MdiChildren)
            {
                if (frm.Name == frmName)
                {
                    frm.BringToFront();
                    frm.Activate();
                    return true;
                }
            }

            return false;
        }

        public bool HavePermission(string text)
        {
            foreach (DataRow row in Program.dtPermission.Rows)
            {
                if (row[0].ToString() == text)
                    return true;
            }
            return false;
        }

        private void frmMain_Load(object sender, EventArgs e)
        {
            //Setup main menu
            foreach (ToolStripItem item in toolStrip1.Items)
                item.Visible = HavePermission(item.Text);

            bool lậpPhiếuNhập = HavePermission("Thêm phiếu nhập kho");
            lậpPhiếuNhậpToolStripMenuItem.Visible = lậpPhiếuNhập;
            bool lậpPhiếuXuất = HavePermission("Thêm phiếu xuất kho");
            lậpPhiếuXuấtToolStripMenuItem.Visible = lậpPhiếuXuất;
            bool lậpPhiếuThu = HavePermission("Thêm phiếu thu");
            lậpPhiếuThuToolStripMenuItem.Visible = lậpPhiếuThu;
            bool lậpPhiếuChi = HavePermission("Thêm phiếu chi");
            lậpPhiếuChiToolStripMenuItem.Visible = lậpPhiếuChi;

            toolStripMenuItem9.Visible = (lậpPhiếuNhập || lậpPhiếuXuất) && (lậpPhiếuThu || lậpPhiếuChi);
            toolStripMenuItem3.Visible = (lậpPhiếuNhập || lậpPhiếuXuất || lậpPhiếuThu || lậpPhiếuChi);

            bool phiếuNhập = HavePermission(phiếuNhậpToolStripMenuItem.Text);
            phiếuNhậpToolStripMenuItem.Visible = phiếuNhập;
            bool phiếuXuất = HavePermission(phiếuXuấtToolStripMenuItem.Text);
            phiếuXuấtToolStripMenuItem.Visible = phiếuXuất;
            bool phiếuThu = HavePermission(phiếuThuToolStripMenuItem.Text);
            phiếuThuToolStripMenuItem.Visible = phiếuThu;
            bool phiếuChi = HavePermission(phiếuChiToolStripMenuItem.Text);
            phiếuChiToolStripMenuItem.Visible = phiếuChi;
            bool sảnPhẩm = HavePermission(sảnPhẩmToolStripMenuItem.Text);
            sảnPhẩmToolStripMenuItem.Visible = sảnPhẩm;
            bool nhânViên = HavePermission(nhânViênToolStripMenuItem.Text);
            nhânViênToolStripMenuItem.Visible = nhânViên;

            toolStripMenuItem10.Visible = (phiếuNhập || phiếuXuất) && (phiếuThu || phiếuChi);
            toolStripMenuItem1.Visible = sảnPhẩm && (phiếuNhập || phiếuXuất || phiếuThu || phiếuChi);
            toolStripMenuItem2.Visible = nhânViên && (phiếuNhập || phiếuXuất || phiếuThu || phiếuChi || sảnPhẩm);

            bool doanhThu = HavePermission(doanhThuToolStripMenuItem.Text);
            doanhThuToolStripMenuItem.Visible = doanhThu;
            bool lợiNhuận = HavePermission(lợiNhuậnToolStripMenuItem.Text);
            lợiNhuậnToolStripMenuItem.Visible = lợiNhuận;
            bool kho = HavePermission(khoToolStripMenuItem.Text);
            khoToolStripMenuItem.Visible = kho;

            toolStripMenuItem6.Visible = kho && (doanhThu || lợiNhuận);

            bool càiĐặtỨngDụng = HavePermission(càiĐặtỨngDụngToolStripMenuItem.Text);
            càiĐặtỨngDụngToolStripMenuItem.Visible = càiĐặtỨngDụng;
            bool thôngTinCôngTy = HavePermission(thôngTinCôngTyToolStripMenuItem.Text);
            thôngTinCôngTyToolStripMenuItem.Visible = thôngTinCôngTy;
            bool cấuHìnhCơSởDữLiệu = HavePermission(cấuHìnhCơSởDữLiệuToolStripMenuItem.Text);
            cấuHìnhCơSởDữLiệuToolStripMenuItem.Visible = cấuHìnhCơSởDữLiệu;
            bool backupCơSởDữLiệu = HavePermission(backupCơSởDữLiệuToolStripMenuItem.Text);
            backupCơSởDữLiệuToolStripMenuItem.Visible = backupCơSởDữLiệu;
            bool restoreCơSởDữLiệu = HavePermission(restoreCơSởDữLiệuToolStripMenuItem.Text);
            restoreCơSởDữLiệuToolStripMenuItem.Visible = restoreCơSởDữLiệu;
            bool phânQuyền = HavePermission(phânQuyềnToolStripMenuItem.Text);
            phânQuyềnToolStripMenuItem.Visible = phânQuyền;
            
            toolStripMenuItem5.Visible = càiĐặtỨngDụng && thôngTinCôngTy;
            toolStripMenuItem8.Visible = (càiĐặtỨngDụng || thôngTinCôngTy) && (cấuHìnhCơSởDữLiệu || backupCơSởDữLiệu || restoreCơSởDữLiệu);
            toolStripMenuItem11.Visible = phânQuyền && (càiĐặtỨngDụng || thôngTinCôngTy || cấuHìnhCơSởDữLiệu || backupCơSởDữLiệu || restoreCơSởDữLiệu);
            
            toolStripMenuItem7.Visible = cậpNhậtToolStripMenuItem.Visible = HavePermission(cậpNhậtToolStripMenuItem.Text);
            

            //Setup status bar
            lblToday.Text = "Hôm nay: " + DateTime.Today.ToShortDateString();
            lblCopy.Text = "Bản quyền © 2013 CTY TNHH TM-DV Tin Học Giải Pháp Số";

            frmWelcome frmWc = new frmWelcome();
            frmWc.MdiParent = this;
            frmWc.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
            frmWc.Dock = DockStyle.Fill;
            frmWc.Show();
        }

        private void nhânViênToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!CheckFormAlreadyOpen("frmListEmployee"))
            {
                frmListEmployee frmLstEmp = new frmListEmployee();
                frmLstEmp.Show();
            }
        }

        private void đóngỨngDụngToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void sảnPhẩmToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!CheckFormAlreadyOpen("frmListProduct"))
            {
                frmListProduct frmLstProd = new frmListProduct();
                frmLstProd.Show();
            }
        }

        private void cấuHìnhCơSởDữLiệuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmDBConfig frmDatabaseConfig = new frmDBConfig();
            frmDatabaseConfig.ShowDialog();
        }

        private void thôngTinCôngTyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmComInfo frmComInfomation = new frmComInfo();
            frmComInfomation.ShowDialog();
        }

        private void phiếuNhậpToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!CheckFormAlreadyOpen("frmListReceiving"))
            {
                frmListReceiving frmLstRec = new frmListReceiving();
                frmLstRec.Show();
            }
        }

        private void phiếuXuấtToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!CheckFormAlreadyOpen("frmListDelivery"))
            {
                frmListDelivery frmLstDeliv = new frmListDelivery();
                frmLstDeliv.Show();
            }
        }

        private void phiếuThuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!CheckFormAlreadyOpen("frmListReceipt"))
            {
                frmListReceipt frmLstReceipt = new frmListReceipt();
                frmLstReceipt.Show();
            }
        }

        private void phiếuChiToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!CheckFormAlreadyOpen("frmListPayment"))
            {
                frmListPayment frmLstPayment = new frmListPayment();
                frmLstPayment.Show();
            }
        }

        private void lậpPhiếuNhậpToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmEditReceivingVoucher frm = new frmEditReceivingVoucher(BaseFormEdit.OpenMode.NEW);
            frm.ShowDialog();
        }

        private void đăngXuấtToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Restart();
        }

        private void lậpPhiếuXuấtToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmEditDeliveryVoucher frm = new frmEditDeliveryVoucher(BaseFormEdit.OpenMode.NEW);
            frm.ShowDialog();
        }

        private void lậpPhiếuThuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmEditReceiptVoucher frm = new frmEditReceiptVoucher(BaseFormEdit.OpenMode.NEW);
            frm.ShowDialog();
        }

        private void lậpPhiếuChiToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmEditPaymentVoucher frm = new frmEditPaymentVoucher(BaseFormEdit.OpenMode.NEW);
            frm.ShowDialog();
        }

        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            frmEditEmployee frm = new frmEditEmployee(BaseFormEdit.OpenMode.EDIT, Program.EmpId);
            frm.ShowDialog();
        }

        private void khoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmViewReport frm = new frmViewReport(frmViewReport.ReportType.STOCK_STATISTICS);
            frm.Show();
        }

        private void phânQuyềnToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmGantPermission frm = new frmGantPermission();
            frm.ShowDialog();
        }

        private void doanhThuToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmPreStatistics frm = new frmPreStatistics(frmViewReport.ReportType.REVENUE);
            frm.ShowDialog();
        }

        private void lợiNhuậnToolStripMenuItem_Click(object sender, EventArgs e)
        {
            frmPreStatistics frm = new frmPreStatistics(frmViewReport.ReportType.PROFIT);
            frm.ShowDialog();
        }
    }
}
